package com.smartwebx.ha.dal.usebean;

import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;

import org.apache.commons.lang3.StringUtils;
import com.google.common.base.Objects;
import com.google.common.base.Strings;

/**
 * 站码基本信息类
 * 
 * @author XX
 * 
 */
public class StationInfo implements Serializable {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	// 测站编码
	private String stcd;
	// 测站名称
	private String stnm;
	// 测站类别
	private String sttp;
	// 报讯等级
	private String frgrd;
	// 基面名称
	private String dtmnm;
	// 管理结构
	private String admauth;
	// 流域名称
	private String bsnm;
	// 水系名称
	private String hnnm;
	// 河流名称
	private String rvnm;
	// 集水面积
	private String drna;
	// 建站年月
	private String esstym;
	// 始报年月
	private String bgfrym;
	// 备注
	private String comments;

	/**
	 * 测站编码
	 * 
	 * @return
	 */
	public String getStcd() {
		return stcd;
	}

	/**
	 * 测站编码
	 * 
	 * @param stcd
	 */
	public void setStcd(String stcd) {
		this.stcd = StringUtils.trim(stcd);
	}

	/**
	 * 测站名称
	 * 
	 * @return
	 */
	public String getStnm() {
		return stnm;
	}

	/**
	 * 测站名称
	 * 
	 * @param stnm
	 */
	public void setStnm(String stnm) {
		this.stnm = StringUtils.trim(stnm);
	}

	/**
	 * 测站类别
	 * 
	 * @return
	 */
	public String getSttp() {
		return sttp;
	}

	/**
	 * 测站类别
	 * 
	 * @param sttp
	 */
	public void setSttp(String sttp) {
		this.sttp = StringUtils.trim(sttp);
		if (!Strings.isNullOrEmpty(this.sttp)) {
			this.sttp = this.getStationTypeMap().get(this.sttp);
		}
	}

	/**
	 * 报讯等级
	 * 
	 * @return
	 */
	public String getFrgrd() {
		return frgrd;
	}

	/**
	 * 报讯等级
	 * 
	 * @param frgrd
	 */
	public void setFrgrd(String frgrd) {
		this.frgrd = StringUtils.trim(frgrd);
		if (!Strings.isNullOrEmpty(this.frgrd)) {
			this.frgrd = this.getFrgrdMap().get(this.frgrd);
		}
	}

	/**
	 * 基面名称
	 * 
	 * @return
	 */
	public String getDtmnm() {
		return dtmnm;
	}

	/**
	 * 基面名称
	 * 
	 * @param dtmnm
	 */
	public void setDtmnm(String dtmnm) {
		this.dtmnm = StringUtils.trim(dtmnm);
	}

	/**
	 * 管理结构
	 * 
	 * @return
	 */
	public String getAdmauth() {
		return admauth;
	}

	/**
	 * 管理结构
	 * 
	 * @param admauth
	 */
	public void setAdmauth(String admauth) {
		this.admauth = StringUtils.trim(admauth);
	}

	/**
	 * 流域名称
	 * 
	 * @return
	 */
	public String getBsnm() {
		return bsnm;
	}

	/**
	 * 流域名称
	 * 
	 * @param bsnm
	 */
	public void setBsnm(String bsnm) {
		this.bsnm = StringUtils.trim(bsnm);
	}

	/**
	 * 水系名称
	 * 
	 * @return
	 */
	public String getHnnm() {
		return hnnm;
	}

	/**
	 * 水系名称
	 * 
	 * @param hnnm
	 */
	public void setHnnm(String hnnm) {
		this.hnnm = StringUtils.trim(hnnm);
	}

	/**
	 * 河流名称
	 * 
	 * @return
	 */
	public String getRvnm() {
		return rvnm;
	}

	/**
	 * 河流名称
	 * 
	 * @param rvnm
	 */
	public void setRvnm(String rvnm) {
		this.rvnm = StringUtils.trim(rvnm);
	}

	/**
	 * 集水面积
	 * 
	 * @return
	 */
	public String getDrna() {
		return drna;
	}

	/**
	 * 集水面积
	 * 
	 * @param drna
	 */
	public void setDrna(String drna) {
		this.drna = StringUtils.trim(drna);
	}

	/**
	 * 建站年月
	 * 
	 * @return
	 */
	public String getEsstym() {
		return esstym;
	}

	/**
	 * 建站年月
	 * 
	 * @param esstym
	 */
	public void setEsstym(String esstym) {
		this.esstym = StringUtils.trim(esstym);
	}

	/**
	 * 始报年月
	 * 
	 * @return
	 */
	public String getBgfrym() {
		return bgfrym;
	}

	/**
	 * 始报年月
	 * 
	 * @param bgfrym
	 */
	public void setBgfrym(String bgfrym) {
		this.bgfrym = StringUtils.trim(bgfrym);
	}

	/**
	 * 备注
	 * 
	 * @return
	 */
	public String getComments() {
		return comments;
	}

	/**
	 * 备注
	 * 
	 * @param comments
	 */
	public void setComments(String comments) {
		this.comments = StringUtils.trim(comments);
	}

	@Override
	public int hashCode() {
		return Objects.hashCode(stcd, stnm, sttp, frgrd, dtmnm, admauth, bsnm,
				hnnm, rvnm, drna, esstym, bgfrym, comments);
	}

	@Override
	public boolean equals(Object object) {
		if (object instanceof StationInfo) {
			StationInfo that = (StationInfo) object;
			return Objects.equal(this.stcd, that.stcd)
					&& Objects.equal(this.stnm, that.stnm)
					&& Objects.equal(this.sttp, that.sttp)
					&& Objects.equal(this.frgrd, that.frgrd)
					&& Objects.equal(this.dtmnm, that.dtmnm)
					&& Objects.equal(this.admauth, that.admauth)
					&& Objects.equal(this.bsnm, that.bsnm)
					&& Objects.equal(this.hnnm, that.hnnm)
					&& Objects.equal(this.rvnm, that.rvnm)
					&& Objects.equal(this.drna, that.drna)
					&& Objects.equal(this.esstym, that.esstym)
					&& Objects.equal(this.bgfrym, that.bgfrym)
					&& Objects.equal(this.comments, that.comments);
		}
		return false;
	}

	@Override
	public String toString() {
		return Objects.toStringHelper(this).add("stcd", stcd).add("stnm", stnm)
				.add("sttp", sttp).add("frgrd", frgrd).add("dtmnm", dtmnm)
				.add("admauth", admauth).add("bsnm", bsnm).add("hnnm", hnnm)
				.add("rvnm", rvnm).add("drna", drna).add("esstym", esstym)
				.add("bgfrym", bgfrym).add("comments", comments).toString();
	}

	/**
	 * 报讯等级映射
	 * 
	 * @return
	 */
	private Map<String, String> getFrgrdMap() {
		Map<String, String> frgrdMap = new HashMap<String, String>();
		frgrdMap.put("1", "中央报汛站");
		frgrdMap.put("2", "省级重点报汛站");
		frgrdMap.put("3", "省级一般报汛站");
		frgrdMap.put("4", "其他报汛站");

		return frgrdMap;
	}

	/**
	 * 获得站码类型映射
	 * 
	 * @return
	 */
	private Map<String, String> getStationTypeMap() {
		Map<String, String> stationTMap = new HashMap<String, String>();
		stationTMap.put("MM", "气象站");
		stationTMap.put("BB", "蒸发站");
		stationTMap.put("DD", "堰闸水文站");
		stationTMap.put("TT", "潮位站");
		stationTMap.put("DP", "泵站");
		stationTMap.put("SS", "墒情站");
		stationTMap.put("PP", "雨量站");
		stationTMap.put("ZQ", "河道水文站");
		stationTMap.put("ZZ", "河道水位站");
		stationTMap.put("RR", "水库水文站");
		stationTMap.put("ZG", "地下水站");
		stationTMap.put("ZB", "分洪水位站");
		stationTMap.put("ZS", "其他");

		return stationTMap;
	}

}
